package io.github.bigbird0101.youyishi.code;

import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 客户端服务VO
 *
 * @author maituwang
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GenerateCodeParam {

    /**
     * 客户端id
     */
    private String clientId;

    /**
     * 开发者名称
     */
    private String author;
    /**
     * 开发日期
     */
    private String date;

    /**
     * 请求客户端地址
     */
    private String baseURL;

//    /**
//     * 客户端类型
//     */
//    private ProtocolTypeEnum type;
//
//    /**
//     * 扩展信息 保存json字符串
//     */
//    private JSONObject extension;

    /**
     * 客户端名称
     */
    private String clientsName;

    /**
     * 接口验证方式
     */
    private String authType;

    private String productId;

    private String tenantId;

    /**
     * 方法列表
     */
    private List<GenerateClientMethod> methodList;

    /**
     * @author maituwang
     * @desc 自定TOPIC信息对象
     * @date 2022-04-09 15:30:40
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class GenerateClientMethod {

        /**
         * 请求方式  POST GET .....
         */
        private String requestType;


        /**
         * 入参数方式:1、application/json：JSON 数据格式；2、application/x-www-form-urlencoded：表单默认的提数据格式；3、multipart/form-data：一般用于文件上传；
         */
        private Integer paramType;


        /**
         * 请求路径
         */
        private String requestPath;

        /**
         * 描述
         */
        private String remark;

        /**
         * 通过这个字段 来去 查询设备信息
         */
        private String deviceId;

        /**
         * 定时任务刷新时间 秒
         */
        private String refreshTime;

        /**
         * 服务调用标识号
         */
        private String identifier;

        /**
         * 客户端名字
         */
        private String name;

        /**
         * 响应内容获取路径,(如:data.token)
         * 响应回调配置JSON格式(responseType响应文本格式，
         * resultKey判断响应结果字段,
         * resultCode正确响应结果值,
         * resultDataKey获取响应结果内容，
         * 此值为空即返回全部内容):
         * {\"responseType\":\"json\",\"resultKey\":\"code\",\"resultCode\":\"0\",\"resultDataKey\":\"0\"}
         */
        private JSONObject methodResponseConf;

        /**
         * 参数集合
         */
        private List<GenerateClientMethodParam> methodParams;

    }
    /**
     * @author pengpeng_fu
     * @date 2022-11-03 10:29
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class GenerateClientMethodParam {
        /**
         * 客户端调用方法ID
         */
        private Long clientsMethodId;
        /**
         * 参数属性英文名(标识)
         */
        private String paramKey;
        /**
         * 参数属性描述
         */
        private String paramName;
        /**
         * 参数类型(英文小写)：string,int,date,long,object,array,http
         */
        private String paramType;
        /**
         * 标识号
         */
        private Long id;
        /**
         * 所属参数分组ID
         */
        private Long clientsMethodGroupId;
        /**
         * 当参数类型为object,array时，取group_id,当参数类型为http时,取method标识
         */
        private Long paramId;
        /**
         * 参数默认值
         */
        private String paramDefaultValue;
        /**
         * 是否必传:1必传,0非必传
         */
        private Integer isRequire;
        /**
         * 状态：1正常,2异常
         */
        private Integer status;
    }

}
